From 44b0d8b3307704d026bfdc649eaf5e68e1507e50 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Exp=C3=B3sito?= Date: Wed, 23 Jun 2021 08:09:35 +0200 Subject: [PATCH] scrolledwindow: Stop kinetic scrolling on begin Stop kinetic scrolling when a scroll begin signal is sent during the event capture phase. Part-of: --- gtk/gtkscrolledwindow.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index 372afe4a95..49be97080c 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -1350,6 +1350,19 @@ scroll_controller_scroll_begin (GtkEventControllerScroll *scroll, priv->smooth_scroll = TRUE; } +static void +stop_kinetic_scrolling_cb (GtkEventControllerScroll *scroll, + GtkScrolledWindow *scrolled_window) +{ + GtkScrolledWindowPrivate *priv = gtk_scrolled_window_get_instance_private (scrolled_window); + + if (priv->hscrolling) + gtk_kinetic_scrolling_stop (priv->hscrolling); + + if (priv->vscrolling) + gtk_kinetic_scrolling_stop (priv->vscrolling); +} + static void scrolled_window_scroll (GtkScrolledWindow *scrolled_window, double delta_x, @@ -2115,6 +2128,8 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window) controller = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES | GTK_EVENT_CONTROLLER_SCROLL_KINETIC); gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE); + g_signal_connect (controller, "scroll-begin", + G_CALLBACK (stop_kinetic_scrolling_cb), scrolled_window); g_signal_connect (controller, "scroll", G_CALLBACK (captured_scroll_cb), scrolled_window); g_signal_connect (controller, "decelerate", -- 2.30.2